import { CONSOLE_REQUEST_ENABLE } from '@/config' // 请求日志打印 响应日志打印
import store from '@/store'
import {utils} from '@/plugins/utils'
import router from '@/router'
// 请求成功拦截 传入请求参数 返回请求参数 打印
export function requestSuccessFunc(requestObj) {
  CONSOLE_REQUEST_ENABLE && console.info('requestInterceptorFunc', `url: ${requestObj.url}`, requestObj)
  // 自定义请求拦截逻辑，可以处理权限，请求发送监控等
  // ...
  let sid = utils.getCookie('sid')
  if(sid){
    requestObj.headers.sid = sid
  }
  store.dispatch('showLoading')
  return requestObj
}

// 请求失败统一回调 传入错误信息对象 返回一个promise错误对象
export function requestFailFunc(error) {
    store.dispatch('hideLoading')
  // 自定义发送请求失败逻辑，断网，请求发送监控等
  // ...
  //  1.判断请求超时
  if (error.code === 'ECONNABORTED' && error.message.indexOf('timeout') !== -1) {
    CONSOLE_REQUEST_ENABLE && console.log('根据你设置的timeout/真的请求超时 判断请求现在超时了，你可以在这里加入超时的处理方案')
    // return service.request(originalRequest);//例如再重复请求一次
  }
  // 需要优化 并不是所有请求都要跳转页面
  // //  2.需要重定向到错误页面
  // const errorInfo = error.response
  // if (errorInfo) {
  //     // error =errorInfo.data//页面那边catch的时候就能拿到详细的错误信息,看最下边的Promise.reject
  //     const errorStatus = errorInfo.status; // 404 403 500 ... 等
  //     router.push({
  //         path: `/error/${errorStatus}`
  //     })
  // }
  return Promise.reject(error);
}

export function responseSuccessFunc(response) {
  // 自定义响应成功逻辑，全局拦截接口，根据不同业务做不同处理，响应成功监控等
  store.dispatch('hideLoading')
  let data = null;
  // IE9时response.data是undefined，因此需要使用response.request.responseText(Stringify后的字符串)
  if (response.data == undefined) {
    data = response.request.responseText
  } else {
    data = response.data
  }

  // 返回状态码
  let code = data.rt && data.rt.status
  if(!code) return data;
  switch (code) {
    case '800001':
      data.data = '登陆超时';
      router.push({
        path: '/'
      })
      break;
    default:
      // 业务中还会有一些特殊 code 逻辑，我们可以在这里做统一处理，也可以下放它们到业务层
      //   !responseObj.config.noShowDefaultError && GLOBAL.vbus.$emit('business.response.incorrect', resData.msg);
  }
  return data
}

export function responseFailFunc(responseError) {
    store.dispatch('hideLoading')
  // 响应失败，可根据 responseError.message 和 responseError.response.status 来做监控处理
  let errCode = responseError.response.status
  switch (errCode) {
    case 400:
      responseError.message = '请求错误'
      break

    case 401:
      responseError.message = '未授权，请登录'
      break

    case 403:
      responseError.message = '拒绝访问'
      break

    case 404:
      responseError.message = `请求地址出错: ${responseError.response.config.url}`
      break

    case 408:
      responseError.message = '请求超时'
      break

    case 500:
      responseError.message = '服务器内部错误'
      break

    case 501:
      responseError.message = '服务未实现'
      break

    case 502:
      responseError.message = '网关错误'
      break

    case 503:
      responseError.message = '服务不可用'
      break

    case 504:
      responseError.message = '网关超时'
      break

    case 505:
      responseError.message = 'HTTP版本不受支持'
      break

    default:
  }

  return Promise.reject(responseError);
}
